package cn.wolfocde.wolf2w.adivce;

import cn.wolfocde.wolf2w.exception.LogicException;
import cn.wolfocde.wolf2w.util.JsonResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;

/**
 * 通用异常处理类
 * 它是所有控制器的动态代理类对象
 * 目的给所有的处理方法做try异常的处理,
 * 并且对应区分出哪些是系统异常(单独try-catch).对应获取出自定义抛的异常信息给用户看.
 * 比如:数据库系统异常,就提示用户系统繁忙,请联系管理员
 * ;
 * 哪些是登录相关的自定义逻辑异常(单独try-catch),对应获取出自定义抛的异常信息给用户看;
 *
 */
@ControllerAdvice
public class CommonExceptionHandler {
    //和控制器映射方法一样
    //类似是调用真实类的方法,然后给它加try-catch异常功能的处理
    @ExceptionHandler(LogicException.class)
    @ResponseBody
    public Object logicExc(Exception el, HttpServletResponse response) {
        el.printStackTrace();
        response.setContentType("application/json;charset=utf-8");

        return JsonResult.error(JsonResult.CODE_ERROR_PARAM,el.getMessage(),null);
    }
    //try-cath 系统异常(非登录相关的运行时异常)
    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public Object runtimeExc(Exception e, HttpServletResponse response) {
        e.printStackTrace();
        response.setContentType("application/json;charset=utf-8");

        return JsonResult.defaultError();
    }

}
